package juego.tipos;
import juego.tipos.Vector;

public class Posicion extends Vector{
	
	//Inicializa una instancia de Posicion con los valores de coordenadas
	//(x,y) pasados por parametro.
	public Posicion(double xinicial, double yinicial){
		this.set(xinicial,yinicial);
	}
	
	public Posicion(Posicion otra){
		this.set(otra.x,otra.y);
	}

	public boolean igualA(Posicion otra){
		return super.igualA(otra);	//utiliza el igualA protegido de la clase Vector.
						//No se deja publico igualA en Vector para ecitar la posibilidad
						//de comparar Posiciones con otros derivados de Vector.(h)
	}

	public Posicion copiar(){
		return new Posicion(this);		
	}

	public void set(Posicion otra){
		this.set(otra.x,otra.y);
	}

	public double dist(Posicion otra){
		Posicion tmp =	new Posicion(x - otra.x, y - otra.y);
		return tmp.longitud();
	}

	public void rotar(double anguloEnRadianes, Posicion centroDeGiro){
		/*Implementacion Smalltalk:
		| p r theta |
		p := self - centroDeGiro.
		r := p r.	->r es la longitud del vector
				
		theta := anguloEnRadianes asFloat - p theta.
		^ (centroDeGiro x asFloat + (r * theta cos)) @ (centroDeGiro y asFloat - (r * theta sin))
		*/

		Posicion tmp = new Posicion(x - centroDeGiro.x, y - centroDeGiro.y);
		double r= tmp.longitud();
		double theta = anguloEnRadianes + tmp.theta();
		this.set(centroDeGiro.x + (r * Math.cos(theta)), centroDeGiro.y + (r * Math.sin(theta)));
		
	}
		
	
}

